package com.danceforyou.common.util;

import com.danceforyou.common.vo.GeneratorVO;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.Locale;

/**
 * 创建人：FH 创建时间：2015年2月8日
 */
public class FreemarkerUtil {

    /**
     * 输出到输出到文件
     *
     * @param ftlPath   模板文件路径
     * @param ftlName   模板文件名称
     * @param filePath  输出文件路径
     * @param fileName  输出文件名称
     * @param generator 传入的参数
     */
    public static void printFile(String ftlPath, String ftlName, String filePath, String fileName, GeneratorVO generator) {
        try {
            File file = new File(PathUtil.getClasspath() + filePath + fileName);
            if (!file.getParentFile().exists()) {
                file.getParentFile().mkdirs();
            }
            Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), StandardCharsets.UTF_8));
            Template template = getTemplate(ftlPath, ftlName);
            template.process(generator, out);
            out.flush();
            out.close();
        } catch (TemplateException | IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 通过文件名加载模版
     *
     * @param ftlPath 模板文件路径
     * @param ftlName 模板文件名称
     */
    public static Template getTemplate(String ftlPath, String ftlName) {
        try {
            Configuration config = new Configuration();//通过Freemaker的Configuration读取相应的ftl
            config.setEncoding(Locale.CHINA, StandardCharsets.UTF_8.name());
            config.setDirectoryForTemplateLoading(new File(PathUtil.getClasspath() + ftlPath));//设定去哪里读取相应的ftl模板文件
            return config.getTemplate(ftlName);//在模板文件目录中找到名称为name的文件
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}
